[No QA] Fix import/no-cycle - part 7 - #100165
roryabraham merged 2 commits into
Conversation
920229c to
483d854
Compare
483d854 to
e072bd0
Compare
|
@codex review |
|
@thelullabyy Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
|
PR doesn’t need product input as a perf refactor PR. Unassigning and unsubscribing myself. |
e072bd0 to
b125983
Compare
|
rebased |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / SafariScreen.Recording.2026-09-11.at.04.04.39.mov |
|
🚧 roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/roryabraham in version: 9.4.76-0 🚀
|
|
🤖 No help site changes are required for this PR. This is a pure import-cycle refactor. Nothing in What I checked
Help site articles document what users see and do. Since the Pay and Approve flows behave exactly as before, the existing articles remain accurate. @LukasMod, there is no help site PR to link here because no docs changes are needed. If you think an article does need updating, reply and I'll create the draft PR, apply the view run · no recording available |
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.4.76-1 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
actions/IOU/ReportWorkflowimportedmergeAdditionalPayOnyxDatafromactions/IOU/PayMoneyRequest, andPayMoneyRequestimports back into the same mesh, closing a cycle.ReportWorkflownow has no import ofPayMoneyRequestat all, which is the edge this PR exists to cut.PayMoneyRequestandactions/Searchboth import from the new leaves directly, soPayMoneyRequestno longer re-exportsmergeAdditionalPayOnyxDataorAdditionalPayOnyxDataand each symbol has a single import path.The function body is byte-identical to
main, so nothing behaves differently.Effect on
import/no-cycleMeasured with oxlint 1.80.0,
import/no-cycleisolated.mainalonemain+ parts 1-5main+ parts 1-6On its own this is only -1. The edge only becomes load-bearing once the surrounding paths are gone. Stacked behind part 6 it is worth -36 findings and -6 files, the best value-per-line in the series, which is why this is a draft until part 6 lands.
One companion cut is deliberately missing:
PayMoneyRequest -> MoneyRequestBuilderforgetReportPreviewReportAction. That function falls back togetAllReportActionsFromIOU(), a module-scope Onyx cache living inMoneyRequestBuilder, so moving it means moving or injecting that cache. It can have its own PR.Fixed Issues
$ #99650
PROPOSAL:
Tests
Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
android.mov
Android: mWeb Chrome
android.web.mov
iOS: Native
ios.mov
iOS: mWeb Safari
ios.web.mov
MacOS: Chrome / Safari
web.mov